/*!
 * # 数据实体类:
 *  Attachment - 通知附件
 * 
 * # 描述:
 *  表示接收消息的一个附件文件。
 *  
 *  Copyright (c), 上海沃恩信息科技有限公司.
 *  All rights reserved.
 *  Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using Pittypat;

namespace Waln.Notifying.Creating.Data
{
	/// <summary>
	/// 通知附件。
	/// </summary>
	/// <remarks>
	/// 表示接收消息的一个附件文件。
	/// </remarks>
	public sealed class Attachment : global::Pittypat.DataModel
	{
		#region 构造函数

		/// <summary>
		/// 初始化 Attachment 类的一个新实例。
		/// </summary>
		public Attachment()
		{
			// Id
			this.Id = null;
			// 文件名称
			this.Name = null;
			// MIME 类型
			this.Mime = null;
			// 附件文件的大小
			this.Size = null;
			// 文件路径
			this.Url = null;
			// 上传人的 Id
			this.UploaderId = null;
			// 上传时间
			this.UploadTime = null;
		}

		#endregion

		#region 属性

		/// <summary>
		/// 获取或者设置Id。
		/// </summary>
		/// <remarks>
		/// 附件文件的 Id。
		/// </remarks>
		public @uuid? Id { get; set; }

		/// <summary>
		/// 获取或者设置文件名称。
		/// </summary>
		/// <remarks>
		/// 附件文件的名称，包含扩展名称。
		/// </remarks>
		public @string? Name { get; set; }

		/// <summary>
		/// 获取或者设置MIME 类型。
		/// </summary>
		/// <remarks>
		/// 附件文件的 MIME 类型。
		/// </remarks>
		public @string? Mime { get; set; }

		/// <summary>
		/// 获取或者设置附件文件的大小。
		/// </summary>
		/// <remarks>
		/// 附件文件的大小，单位：字节。
		/// </remarks>
		public @int64? Size { get; set; }

        /// <summary>
        /// 获取或者设置文件路径。
        /// </summary>
        /// <remarks>
        /// 附件文件的虚拟路径。
        /// </remarks>
        public @string? Url { get; set; }

		/// <summary>
		/// 获取或者设置上传人的 Id。
		/// </summary>
		/// <remarks>
		/// 上传了当前附件文件的用户的 Id。
		/// </remarks>
		public @uuid? UploaderId { get; set; }

		/// <summary>
		/// 获取或者设置上传时间。
		/// </summary>
		/// <remarks>
		/// 上传当前附件文件的时间。
		/// </remarks>
		public @datetime? UploadTime { get; set; }

		#endregion

		#region 方法

		/// <summary>
		/// 从一个 DbDataReader 中读取此对象。
		/// </summary>
		/// <param name="reader">包含对象数据的 DbDataReader 对象。</param>
		/// <exception cref="global::System.ArgumentNullException">reader 是 null。</exception>
		public override void Read(global::System.Data.Common.DbDataReader reader)
		{
			if (reader == null)
			{
				throw new global::System.ArgumentNullException("reader");
			}

			// Id
			this.Id = reader.GetValue<@uuid>("Id", defaultValue: this.Id);

			// 文件名称
			this.Name = reader.GetValue<@string>("Name", defaultValue: this.Name);

			// MIME 类型
			this.Mime = reader.GetValue<@string>("Mime", defaultValue: this.Mime);

			// 附件文件的大小
			this.Size = reader.GetValue<@int64>("Size", defaultValue: this.Size);

			// 文件路径
			this.Url = reader.GetValue<@string>("Url", defaultValue: this.Url);

			// 上传人的 Id
			this.UploaderId = reader.GetValue<@uuid>("UploaderId", defaultValue: this.UploaderId);

			// 上传时间
			this.UploadTime = reader.GetValue<@datetime>("UploadTime", defaultValue: this.UploadTime);
		}

		/// <summary>
		/// 将当前对象作为 JSON 字符串写入指定的文本流。
		/// </summary>
		/// <param name="writer">目标文本流。</param>
		/// <exception cref="global::System.ArgumentNullException">writer 是 null。</exception>
		public override void Write(global::System.IO.TextWriter writer)
		{
			if (writer == null)
			{
				throw new global::System.ArgumentNullException("writer");
			}

			writer.Write('{');

			// Id
			writer.Write("\"id\":");
			this.Id.Write(writer);
			writer.Write(',');

			// 文件名称
			writer.Write("\"name\":");
			this.Name.Write(writer);
			writer.Write(',');

			// MIME 类型
			writer.Write("\"mime\":");
			this.Mime.Write(writer);
			writer.Write(',');

			// 附件文件的大小
			writer.Write("\"size\":");
			this.Size.Write(writer);
			writer.Write(',');

			// 文件路径
			writer.Write("\"url\":");
			this.Url.Write(writer);
			writer.Write(',');

			// 上传人的 Id
			writer.Write("\"uploaderId\":");
			this.UploaderId.Write(writer);
			writer.Write(',');

			// 上传时间
			writer.Write("\"uploadTime\":");
			this.UploadTime.Write(writer);

			writer.Write('}');
		}

		#endregion
	}
}
